package Offer;

import javax.swing.plaf.IconUIResource;

/**
 * @author lakersUp
 * @Classname   singleNumbers
 * @Description      找出数组中数字出现的次数为1的数字(两个)
 *      分组异或, 重点在于保证这两个数不在同一个组里就行
 *      怎样保证? 根据异或规. 一趟异或之后剩下的数字就是这两个数字异或的结果,
 *      //不同为1, 找出二进制位1的位, 按这个位进行对数组分组
 * @Date 2022/2/27 16:48
 * @Version 1.0
 */
public class Offer56singleNumbers {
    public int[] singleNumbers(int[] nums) {
        int num=0;
        for (int i : nums) {
            num^=i;
        }
        //不同为1, 找出二进制位1的位, 按这个位进行对数组分组
        int index=0;
        while((num&1)==0){
            num=num>>1;
            index++;
        }
        int x = 0,y=0;
        for (int i : nums) {
            if(((i>>index)&1)==0){
                x^=i;
            }else {
                y^=i;
            }
        }
        return new int[]{x,y};
    }
}
